Repository navigation
fix(display): end the scroll before the schedule-off blank and WiFi notice - #721
Conversation
…otice Both screens are drawn by the display controller, not dispatched to a plugin, so #716's handover never reached them. Drawn while the last scroll's state was still set, the schedule-off blank went out with the ticker's lagging rows on a scan-compensated panel and stayed up for its 60 s dwell, and the WiFi notice's redraws (which #712 now shows over a running scroller or Vegas) were timed as 0.5-1 s freezes of the old scroll and logged as a mid-scroll Render stall. The controller now calls set_scrolling_state(False) before drawing either; a scroller that resumes sets the state again on its next frame. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 42 minutes. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (4)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Up to standards ✅🟢 Issues
|
Why
#716 ends the scroll state at a scroller-to-static handover, but only for plugin screens: it hooks
_dispatch_first_frame. The display controller draws two screens itself, so they never got it:Render stall ... mid-scrolllogged.Both were found by the adversarial review of #716 and listed in
docs/SCROLL_PERFORMANCE.mdas a follow-up.What
A new helper,
DisplayController._end_scroll_before_core_screen(), callsdisplay_manager.set_scrolling_state(False)(guarded with getattr like #716's helpers). It runs:_blank_while_scheduled_offclears the panel;_show_wifi_noticedraws a pending notice. It does nothing when there is no notice.With the state ended,
_scan_segmentssends the frame out as drawn and drops the history, the hold goes back to 1, and the frame is timed as static. A scroller or Vegas that resumes after the notice sets the state again on its next frame, as every scroller already does.docs/SCROLL_PERFORMANCE.mddrops the follow-up note. The one screen still composed after a scroll is an olderstatic-imageforced into the high-FPS loop. There is a CHANGELOG entry under Fixes.Tests
test/test_handover_scroll_state.py::TestTheControllersOwnScreensuses a real emulator DisplayManager with ledpi's lag band. It checks that:Mutation check: with the helper made a no-op, the first two fail (they see the ticker's red rows). With it, all pass.
Related suites pass: 419 tests, covering the run loop goldens, WiFi preemption, live takeover, controller, on-demand, pending changes, the exception breaker, dirty tracking, scan order and frame timing.
Not soaked: neither screen comes up in a normal rotation soak.
🤖 Generated with Claude Code